AWS Lambda + API Gatewayで日本語を扱う
LambdaとかAPI Gatewayでの文字化け
この間までLambda関数から日本語を返そうとすると、結果がすべて文字化けしてしまっていました。
そのためbase64でエンコードして受け取り側でデコードするという面倒な手法でしか日本語のやりとりができなかったのですが、
先日のアップデートで日本語が無事返せるようになったようです。
また、API Gatewayでもcontent typeを設定できるようになったみたいで、
ずっとやりたかった、「Lambda + API GatewayでJSON形式のレスポンスを返す」
というのが日本語でもできるようになりました。
今回はその方法についてご紹介。
Lambda + Gatewayサンプル
動作環境
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.10.4
- AWS SDK(JavaScript) : 2.1.42
また、AWSコンソールは使用できることを前提にしています。
1.セットアップ
今回はaws-sdk for javascriptを使用してLambda関数を定義します。
事前にnode.jsとnpmをインストールしておきましょう。
npmが使えるようになったらaws-sdkとgulpもインストールしておきます。
% npm install aws-sdk % npm install -g gulp
2.Lambda関数の用意
まずはLambda関数をローカルで定義します。
Lambdaでは、単純に日本語を含むJSON文字列を返します。
var AWS = require("aws-sdk"); AWS.config.update({region: "<任意のリージョン>"}); exports.handler = function (event, context) { //日本語をJSON形式文字列で返す context.succeed("{message:'日本語返したい'}"); };
次に、ここを参考にLambda関数をデプロイしましょう。
% gulp deploy
3.API Gateway設定
最後にAWSコンソールでAPI Gatewayの設定です。
API設定方法はこのあたりを参考にしてください。
APIに対してResourceとMETHODを定義し、そこのIntegration RequestのLambda Functionで、
先ほどデプロイしたLambda関数を指定します。そして、Method ResponseのMapping Templatesにある
Content-Typeを「application/json;charset=UTF-8」に変更します。
※ちょっと前まではcharsetが指定できなかったみたいです
ここまでできたらTESTボタンを押してAWSコンソール上で動作を確認してみてください。
JSON文字列がResponse Bodyに表示されます。
また、このAPIをデプロイして発行されたURLにアクセスしてみてください。
ブラウザにJSON文字列が問題無く表示されます。
まとめ
日本語も問題なく扱えるようになったようで、Lambda + API Gatewayを思う存分使えるようになりますね。